Fix http://llvm.org/bugs/show_bug.cgi?id=11461. Credit Alberto Ganesh Barbati. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@146345 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/ext/hash_map b/include/ext/hash_map index f6a11f0..bebdccb 100644 --- a/include/ext/hash_map +++ b/include/ext/hash_map
@@ -215,7 +215,11 @@ using namespace std; -template <class _Tp, class _Hash, bool = is_empty<_Hash>::value> +template <class _Tp, class _Hash, bool = is_empty<_Hash>::value +#if __has_feature(is_final) + && !__is_final(_Hash) +#endif + > class __hash_map_hasher : private _Hash { @@ -247,7 +251,11 @@ {return __hash_(__x);} }; -template <class _Tp, class _Pred, bool = is_empty<_Pred>::value> +template <class _Tp, class _Pred, bool = is_empty<_Pred>::value +#if __has_feature(is_final) + && !__is_final(_Pred) +#endif + > class __hash_map_equal : private _Pred {
diff --git a/include/map b/include/map index abdaa3b..633579b 100644 --- a/include/map +++ b/include/map
@@ -381,7 +381,11 @@ _LIBCPP_BEGIN_NAMESPACE_STD -template <class _Key, class _Tp, class _Compare, bool = is_empty<_Compare>::value> +template <class _Key, class _Tp, class _Compare, bool = is_empty<_Compare>::value +#if __has_feature(is_final) + && !__is_final(_Compare) +#endif + > class __map_value_compare : private _Compare {
diff --git a/include/memory b/include/memory index c3e3af4..e7fe78e 100644 --- a/include/memory +++ b/include/memory
@@ -1848,8 +1848,16 @@ template <class _T1, class _T2, bool = is_same<typename remove_cv<_T1>::type, typename remove_cv<_T2>::type>::value, - bool = is_empty<_T1>::value, - bool = is_empty<_T2>::value> + bool = is_empty<_T1>::value +#if __has_feature(is_final) + && !__is_final(_T1) +#endif + , + bool = is_empty<_T2>::value +#if __has_feature(is_final) + && !__is_final(_T2) +#endif + > struct __libcpp_compressed_pair_switch; template <class _T1, class _T2, bool IsSame>
diff --git a/include/tuple b/include/tuple index d0f832e..9ae0587 100644 --- a/include/tuple +++ b/include/tuple
@@ -146,7 +146,11 @@ // __tuple_leaf -template <size_t _Ip, class _Hp, bool=is_empty<_Hp>::value> +template <size_t _Ip, class _Hp, bool=is_empty<_Hp>::value +#if __has_feature(is_final) + && !__is_final(_Hp) +#endif + > class __tuple_leaf; template <size_t _Ip, class _Hp, bool _Ep>
diff --git a/include/unordered_map b/include/unordered_map index 0862e3f..3b1701e 100644 --- a/include/unordered_map +++ b/include/unordered_map
@@ -325,7 +325,11 @@ _LIBCPP_BEGIN_NAMESPACE_STD -template <class _Tp, class _Hash, bool = is_empty<_Hash>::value> +template <class _Tp, class _Hash, bool = is_empty<_Hash>::value +#if __has_feature(is_final) + && !__is_final(_Hash) +#endif + > class __unordered_map_hasher : private _Hash { @@ -371,7 +375,11 @@ {return __hash_(__x);} }; -template <class _Tp, class _Pred, bool = is_empty<_Pred>::value> +template <class _Tp, class _Pred, bool = is_empty<_Pred>::value +#if __has_feature(is_final) + && !__is_final(_Pred) +#endif + > class __unordered_map_equal : private _Pred {